﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

using SIMA.Entities;
using SIMA.Core.Extension;
using SIMA.Client.Auxiliars.MVVM;
using SIMA.Core.Enums;

namespace SIMA.Client.Programacion
{
    /// <summary>
    /// Lógica de interacción para frmGestionarEquipo.xaml
    /// </summary>
    public partial class frmGestionarEquipo : UserControl
    {
        GestionarEquipoMvvm gestionarEquipoMvvm;

        public frmGestionarEquipo()
        {
            InitializeComponent();
            Init();
        }

        public void Init()
        {
            gestionarEquipoMvvm = new GestionarEquipoMvvm();
            LayoutRoot.DataContext = gestionarEquipoMvvm;
            cmEstadoEquipo.ItemsSource = gestionarEquipoMvvm.Estados;
        }
        private void Clean()
        {
            txtAlturaEquipo.Clear();
            txtCapacidadOperacionEquipo.Clear();
            txtCaudalEquipo.Clear();
            txtCostoEquipo.Clear();
            txtDescripcionEquipo.Clear();
            txtDiamteroInternoEquipo.Clear();
            txtIdEquipo.Clear();
            txtMaxHorasEquipo.Clear();
            txtNombreEquipo.Clear();
            txtRevestimientoEquipo.Clear();
            txtSerieEquipo.Clear();
            txtStockEquipo.Clear();
            cmbAEquipo.SelectedItem = null;
            cmbAreaEquipo.SelectedItem = null;
            cmbMarcas.SelectedItem = null;
            cmbModelos.SelectedItem = null;
            cmEstadoEquipo.SelectedItem = null;
            dgEquipos.SelectedItem = null;
            dpFechaAdquisicion.SelectedDate = null;
        }

        private void btnGuardar_Click(object sender, RoutedEventArgs e)
        {
            if (dgEquipos.SelectedItem == null)
            {
                T_C_Equipo newEquipo = new T_C_Equipo();
                newEquipo.Id_Equipo = txtIdEquipo.Text;
                if (txtAlturaEquipo.Text != string.Empty)
                {
                    //newEquipo.Altura = Convert.ToDecimal(txtAlturaEquipo.Text);
                }
                if (txtCapacidadOperacionEquipo.Text != string.Empty)
                {
                    //newEquipo.CapacidadOperacion = Convert.ToDecimal(txtCapacidadOperacionEquipo.Text);
                }
                if (txtCaudalEquipo.Text != string.Empty)
                {
                    //newEquipo.Caudal = Convert.ToInt32(txtCaudalEquipo.Text);
                }
                if (txtCostoEquipo.Text != string.Empty)
                {
                    newEquipo.Costo = double.Parse(txtCostoEquipo.Text);
                }
                newEquipo.Descripcion = txtDescripcionEquipo.Text;
                if (txtDiamteroInternoEquipo.Text != string.Empty)
                {
                    //newEquipo.DiamteroInterno = Convert.ToDecimal(txtDiamteroInternoEquipo.Text);
                }
                if (cmbAEquipo.SelectedItem != null)
                {
                    newEquipo.EquipoPadre = (cmbAEquipo.SelectedItem as T_C_Equipo).Id_Equipo;
                }
                if (cmEstadoEquipo.SelectedItem != null)
                {
                    newEquipo.Id_Estado = (cmEstadoEquipo.SelectedItem as T_C_Estado).Id_Estado;
                }
                if (cmbMarcas.SelectedItem != null)
                {
                    newEquipo.Id_Marca = (cmbMarcas.SelectedItem as T_C_Marca).Id_Marca;
                }
                if (cmbModelos.SelectedItem != null)
                {
                    newEquipo.Id_Modelo = (cmbModelos.SelectedItem as T_C_Modelo).Id_Modelo;
                }
                if (cmbAreaEquipo.SelectedItem != null)
                {
                    newEquipo.Id_Area = (cmbAreaEquipo.SelectedItem as T_C_Area).Id_Area;
                }
                if (dpFechaAdquisicion.SelectedDate != null)
                {
                    newEquipo.Fecha_Adquisicion = (DateTime)dpFechaAdquisicion.SelectedDate;
                }
                if (txtMaxHorasEquipo.Text != string.Empty)
                {
                    newEquipo.MaxHoras = Convert.ToInt32(txtMaxHorasEquipo.Text);
                }
                if (cmbAEquipo.SelectedItem != null)
                {
                    newEquipo.Nivel = (cmbAEquipo.SelectedItem as T_C_Equipo).Nivel + 1;
                }
                else
                {
                    newEquipo.Nivel = 1;
                }
                //newEquipo.Nombre = txtNombreEquipo.Text;
                //newEquipo.RevestimientoInterno = txtRevestimientoEquipo.Text;
                newEquipo.Serie = txtSerieEquipo.Text;
                newEquipo.Fecha_Registro = DateTime.Now;
                if (dpFechaAdquisicion.SelectedDate != null)
                {
                    newEquipo.Fecha_Adquisicion = (DateTime)dpFechaAdquisicion.SelectedDate;
                }
                if (txtStockEquipo.Text != string.Empty)
                {
                    newEquipo.Stock = Convert.ToInt32(txtStockEquipo.Text);
                }
                if (newEquipo.Nivel == 1)
                {
                    //newEquipo.TipoEquipo = "Sistema";
                }
                if (newEquipo.Nivel == 2)
                {
                    //newEquipo.TipoEquipo = "SubSistema";
                }
                if (newEquipo.Nivel >= 3)
                {
                    //newEquipo.TipoEquipo = "Componente";
                }
                if (chkUsoUnico.IsChecked == true)
                {
                    newEquipo.UsoUnico = true;
                }
                else
                {
                    newEquipo.UsoUnico = false;
                }

                this.gestionarEquipoMvvm.Register(newEquipo);
            }
            else
            {
                T_C_Equipo equipoUpdated = (dgEquipos.SelectedItem as T_C_Equipo).Clone();
                T_C_Equipo equipoToUpdate = (dgEquipos.SelectedItem as T_C_Equipo);
                //equipoUpdated.Altura = Convert.ToDecimal(txtAlturaEquipo.Text);
                //equipoUpdated.CapacidadOperacion = Convert.ToDecimal(txtCapacidadOperacionEquipo.Text);
                //equipoUpdated.Caudal = Convert.ToInt32(txtCaudalEquipo.Text);
                equipoUpdated.Costo = float.Parse(txtCostoEquipo.Text);
                equipoUpdated.Descripcion = txtDescripcionEquipo.Text;
                //equipoUpdated.DiamteroInterno = Convert.ToDecimal(txtDiamteroInternoEquipo.Text);
                if (cmbAEquipo.SelectedItem != null)
                {
                    equipoUpdated.EquipoPadre = (cmbAEquipo.SelectedItem as T_C_Equipo).Id_Equipo;
                }
                if (cmEstadoEquipo.SelectedItem != null)
                {
                    equipoUpdated.Id_Estado = (cmEstadoEquipo.SelectedItem as T_C_Estado).Id_Estado;
                }
                if (cmbMarcas.SelectedItem != null)
                {
                    equipoUpdated.Id_Marca = (cmbMarcas.SelectedItem as T_C_Marca).Id_Marca;
                }
                if (cmbModelos.SelectedItem != null)
                {
                    equipoUpdated.Id_Modelo = (cmbModelos.SelectedItem as T_C_Modelo).Id_Modelo;
                }
                if (cmbAreaEquipo.SelectedItem != null)
                {
                    equipoUpdated.Id_Area = (cmbAreaEquipo.SelectedItem as T_C_Area).Id_Area;
                }
                equipoUpdated.MaxHoras = Convert.ToInt32(txtMaxHorasEquipo.Text);
                if (cmbAEquipo.SelectedItem != null)
                {
                    equipoUpdated.Nivel = (cmbAEquipo.SelectedItem as T_C_Equipo).Nivel + 1;
                }
                else
                {
                    equipoUpdated.Nivel = 1;
                }
                //equipoUpdated.Nombre = txtNombreEquipo.Text;
                //equipoUpdated.RevestimientoInterno = txtRevestimientoEquipo.Text;
                equipoUpdated.Serie = txtSerieEquipo.Text;
                equipoUpdated.Stock = Convert.ToInt32(txtStockEquipo.Text);
                if (equipoUpdated.Nivel == 1)
                {
                    //equipoUpdated.TipoEquipo = "Sistema";
                }
                if (equipoUpdated.Nivel == 2)
                {
                    //equipoUpdated.TipoEquipo = "SubSistema";
                }
                if (equipoUpdated.Nivel >= 3)
                {
                    //equipoUpdated.TipoEquipo = "Componente";
                }
                if (chkUsoUnico.IsChecked == true)
                {
                    equipoUpdated.UsoUnico = true;
                }
                else
                {
                    equipoUpdated.UsoUnico = false;
                }
                equipoUpdated.Fecha_Adquisicion = (DateTime)dpFechaAdquisicion.SelectedDate;

                this.gestionarEquipoMvvm.Update(equipoToUpdate, equipoUpdated);
            }
        }

        private void btnEliminar_Click(object sender, RoutedEventArgs e)
        {
            this.gestionarEquipoMvvm.Delete(dgEquipos.SelectedItem as T_C_Equipo);
        }

        private void btmCancelar_Click(object sender, RoutedEventArgs e)
        {
            Clean();
        }

        private void dgEquipos_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (dgEquipos.SelectedItem != null)
            {
                T_C_Equipo equipo = dgEquipos.SelectedItem as T_C_Equipo;
                //txtAlturaEquipo.Text = equipo.Altura.ToString();
                //txtCapacidadOperacionEquipo.Text = equipo.CapacidadOperacion.ToString();
                //txtCaudalEquipo.Text = equipo.Caudal.ToString();
                txtCostoEquipo.Text = equipo.Costo.ToString();
                txtDescripcionEquipo.Text = equipo.Descripcion;
                //txtDiamteroInternoEquipo.Text = equipo.DiamteroInterno.ToString();
                txtIdEquipo.Text = equipo.Id_Equipo;
                txtMaxHorasEquipo.Text = equipo.MaxHoras.ToString();
                //txtNombreEquipo.Text = equipo.Nombre;
                //txtRevestimientoEquipo.Text = equipo.RevestimientoInterno;
                txtSerieEquipo.Text = equipo.Serie;
                txtStockEquipo.Text = equipo.Stock.ToString();
                //cmbAEquipo.SelectedItem = (cmbAEquipo.ItemsSource as List<T_C_Equipo>).Where(w => w.EquipoPadre == equipo.EquipoPadre).First();
                if (equipo.EquipoPadre != null)
                {
                    cmbAEquipo.SelectedItem = (cmbAreaEquipo.ItemsSource as List<T_C_Equipo>).Where(w => w.Id_Equipo == equipo.EquipoPadre).First();
                }
                cmbAreaEquipo.SelectedItem = (cmbAreaEquipo.ItemsSource as List<T_C_Area>).Where(w => w.Id_Area == equipo.Id_Area).First();
                cmbMarcas.SelectedItem = (cmbMarcas.ItemsSource as List<T_C_Marca>).Where(w => w.Id_Marca == equipo.Id_Marca).First();
                cmbModelos.SelectedItem = (cmbModelos.ItemsSource as List<T_C_Modelo>).Where(w => w.Id_Modelo == equipo.Id_Modelo).First();
                cmEstadoEquipo.SelectedItem = (cmEstadoEquipo.ItemsSource as List<T_C_Estado>).Where(w => w.Id_Estado == equipo.Id_Estado).First();
                dpFechaAdquisicion.SelectedDate = equipo.Fecha_Adquisicion;
            }
            else
            {
                Clean();
            }
        }

        private void cmbFiltroPorEstado_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            switch (((T_C_Estado)cmbFiltroPorEstado.SelectedItem).Nombre_Estado)
            {
                case "Activo":
                    gestionarEquipoMvvm.Filtro = FilterType.Active;
                    break;
                case "Inactivo":
                    gestionarEquipoMvvm.Filtro = FilterType.Inactive;
                    break;
                case "En Cola de Mantenimiento":
                    gestionarEquipoMvvm.Filtro = FilterType.OnQueue;
                    break;
                case "En Espera":
                    gestionarEquipoMvvm.Filtro = FilterType.OnWait;
                    break;
            }
        }

        private void cmbMarcas_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            this.gestionarEquipoMvvm.MarcaActual = (T_C_Marca)cmbMarcas.SelectedItem;
        }
    }
}
